import axios from "axios";
import router from "../router";
import elm from "element-ui";
//引入进度条
import nprogress from "nprogress";
//引入进度条css
import "nprogress/nprogress.css";

//从axios中拿到取消请求方法
//(函数)
const canceltoken = axios.CancelToken;

//(对象)
let http = axios.create({
  //会将传入的对象添加到axios的原型上
  baseURL: "/api", //基础地址
  withCredentials: true, //表示跨域请求时是否需要使用凭证
  timeout: 10000,
});

//axios请求拦截器可以拦截所有请求
http.interceptors.request.use((config) => {
  //在所有请求请求前开启进度条
  nprogress.start();
  //定义确认放行的地址的数组
  //因为登录，获取验证码，校验验证码不需要携带token
  let affirmPath = [
    "/users/getCaptcha",
    "/users/verifyCaptcha",
    "/users/login",
  ];
  //config.url可以获取当前被拦截的地址
  if (affirmPath.includes(config.url)) {
    //放行
    return config;
  } else {
    let token = localStorage.getItem("login-token") || "";
    config.headers["Authorization"] = token;
    return config;
  }
});

//axios响应拦截器可以拦截所有响应
http.interceptors.response.use((config) => {
  //在所有响应响应时关闭进图条
  nprogress.done();
  //当响应回来的状态码是10022,1004需要跳转到登录页并且清除token
  //console.log(config);
  if (config.data.code == "10022" || config.data.code == "1004") {
    //跳转到登录页
    router.push("/login");
    //清除token
    localStorage.removeItem("login-token");
    //刷新页面
    location.reload();
    //弹出警告信息
    elm.Message.error("登录已经过期，请重新登录");
  }

  return config;
});
export {
  canceltoken,
  // http as default
};
export default http
